1988-Club80-24, S.40-42HRG, daß die Schwarte krachtArnulf Sopp Im Sonderheft über die Aufrüstung des Genie 3s stellten Helmut und ich unsere Erweiterung vor, mit der alle Speicherbaugruppen dieses Computers eine vierfache Kapazität erhielten. Dazu gehörten auch der Bildschirm mit 8 kB (zuvor 2 kB) und die Graphik mit 256 kB (vorher 64). Viel später fiel mir auf, daß der Video-Controller (6845 CRTC) 14 Adreßleitungen hat. Damit könnte er sogar 16 kB Bildschirm verwalten. Er war aber noch immer wegen der ursprünglichen 2 kB nur mit 11 Leitungen verkabelt. So wurden die Addressen A11 und A12 des 6845 auch noch an den Bildwiederholspeicher angelötet. Das sieht nun so aus: Nach dieser Operation ist die Hardware des Videoteils nun folgendermaßen konfiguriert: wie in alten Zeiten kann die CPU nur höchtens 2 kB von 3800-3FFFh gleichzeitig erreichen. Das langt z.B. für 80 X 26 Zeichen. Den Zugriff auf die vollen 8 kB erhält sie in Portionen zu 2 kB über die Bits 2 und 3 des Ports F3h (per OUT-Befehl). So ergeben sich aus der Perspektive des Z80 vier Einzelbildschirme zu 2048 Zeichen. Sie können selbstverständlich nacheinander mit einem zusammenhängenden Text befüllt werden. Das selbe gilt für die Graphik mit achtmal 32 kB oder zweimal 128 kB. Der CRTC aber ist über 13 Adreßleitungen direkt mit dem Video-RAM verbunden; für ihn ist es ein einziger Speicher, den er stückweise oder auch ganz anzeigen kann (sofern der Monitor mitspielt - meiner tut es nicht: s.u.). Daher besteht nun die Möglichkeit, die CPU in einen Teilbereich des Bildschirms von max. 2 kB Größe werkeln zu lassen, während auf Wunsch wesentlich mehr angezeigt wird. Nun war es theoretisch möglich, den kompletten Videospeicher von 8192 Zeichen anzuzeigen. Da wäre aber in dem Gedränge nicht nur nichts mehr zu erkennen. Die Hardware des Monitors (nicht des Computers) setzt auch Grenzen in der vertikalen und horizontalen Punktdichte und damit in der Anzahl der angezeigbaren Zeichen senkrecht und waagerecht. Helmut und ich wollten es wissen. Zum Ausprobieren der maximal möglichen Auflösung ging ich von dem Bildschirmformat 92 X 22 Zeichen bei einer Zeichenhöhe von 12 Scan-Zeilen aus. 92 Zeichen ist bei meinem Monitor die höchstmögliche Zeilenlänge, was ich früher schon einmal ausgetestet hatte. Bei 22 Zeilen ergibt sich eine Bildspeichergröße von knapp 2 kB, also das alte Maximum. 12 Zeilen pro Zeichen erwiesen sich als Obergrenze denn bei 13 Scan-Zeilen begann mein Bildschirm zu schwimmen. Um die größtmögliche Höhe des Bildschirms rauszukriegen, programmierte ich zunächst den Interlace-Modus. Dabei werden abwechselnd zwei Halbbilder angezeigt, um die Anzahl der möglichen Scan-Zeilen zu verdoppeln. Nach der Schimpansen-Methode (Rumprobieren) fand ich anschließend nach und nach die Maximaldaten für die Register 4-7 des CRTC heraus, um den Bildschirm auch vertikal bis zum Anschlag auszureizen. Resultat waren 92 X 60 Zeichen, also fast fünfeinhalb kByte Fernsehen. Für ASCII-Texte wird man diese Format kaum je brauchen. Es ist witzlos, halbe Bibeln gleichzeitig auf dem Bildschirm zu haben. Für Graphik- Anwendungen kann jedoch eine etxrem hohe Auflösung sehr interessant sein. Bei einer Zeichenbreite von 8 Punkten und einer Höhe von 12 Dots gibt dieses Format eine Auflösung von 736 X 720 Pixeln her. Und das mal 2 weil der G3s zwei Graphikseiten speichern und anzeigen kann. Theoretisch sind sogar 1024 X 1024 Dots denkbar, was ein Monitor mit hinreichender Bandbreite dann auch anzeigen sollte. Daher das überlebensgroße 'H' in der Überschrift. Das im Anschluß gelistete Programm füllt den Bildschirm mit einem Graphik- muster, das erkennen läßt, wo welche 32-kB-Seite des Graphikspeichers beginnt. Zunächst werden die experimentell ermittelten Daten auf den CRTC ausgegeben. Es folgt ein wenig G3s-spezifisches Vorgeplänkel (ASCII-Bild- schirm aus- und Graphik einblenden). Danach werden über die Bits 2 und 3 des Port F3h nacheinander die 4 Bildschirme bzw. Graphik-Memories selektiert und mit dem Punktmuster des Bildschirmzählers beladen. Es entstehen senkrechte Streifen unterchiedlicher Länge und Dicke. Wo sich die Form eines Streifens ändert, beginnt ein neuer der 4 Bildschirme alter Größe. Diese äußerst üppige Auflösung wird man wohl selten brauchen. Durchaus sinnvoll ist aber die Möglichkeit, in einem gesonderten Abschnitt des Bildschirms ständig ein Menü, eine oder mehrere Statuszeilen oder ein DIR in der Anzeige zu haben, während die CPU darunter oder darüber noch immer über volle 2 kB Videospeicher verfügen kann. Das Menü wird auch nicht durch einen Scroll oder CLS gelöscht, weil nur der CRTC, nicht aber die CPU gleichzeitig den vollen Bildwiederholspeicher von 8 kB beherrscht. Arnulf Sopp 00001 ; Testroutine, mit der die höchstmögliche Graphikauflösung 00002 : beim Genie 3s mit Helmut Bernhardts Mega-Banker 00003 ; durch Probieren ermittelt werden kann 00004 ; 00005 ; Sopp 00006 5200 00007 00008 5200 214152 00009 start LD HL,data ;Parametertabelle für den CRTC 5203 D1F710 00010 LD BC,10f7h ;Zähler 16 Register, CRTC Datenport F7 5206 AF 00011 XOR A ;A <= 00h CRTC ab Register 0 programmieren 5207 D3F6 00012 setcrtc OUT (0f6h),A ;internes CRTC-Register adressieren 5209 3C 00013 INC A ;auf nächstes von 16 Registern stellen 520A EDA3 00014 OUTI ;Datum auf CRTC ausgeben, Zeiger weiter 520C 20F9 00015 JR NZ,setcrtc ;falls noch nicht 16 Daten ausgegeben 520E DBFA 00016 IN A,(0fah) ;Systemport 1 des G3s 5210 F5 00017 PUSH AF ;Inhalt retten 5211 F602 00018 OR 02h ;Graphik anzeigen 5213 E67F 00019 AND 7fh ;ASCII-Bildschirm ausschalten 5215 F5 00020 PUSH AF ;diesen Zustand auch retten 5216 F608 00021 OR 08h ;Graphik für die CPU für RD/WR freigeben 5218 F3 00022 DI ;vorsichtshalber 5219 D3FA 00023 OUT (0fah),A ;Systembyte 1 neu schreiben 521B 0604 00024 LD B,04h ;Zähler für 4 Bildsch. des Vierfach G3s 521D AF 00025 XOR A ;A <= 00h, ab Bildsch. 0 des 4fach G3s 521E 210080 00026 fillscr LD HL,8000h ;Anfangsadresse des Grafikspeichers 5221 54 00027 LD D,H ;DE <= 8000h = 32kB Graphik pro Bildsch. 5222 5D 00028 LD E,L 5223 D3F3 00029 OUT (0f3h),A ;einen v. 4 Gr.-Bildschirmen selektieren 5225 4F 00030 LD C,A ;Inhalt von Port F3h retten 5226 70 00031 setpix LD (HL),B ;Pixelmuster 04, 03, 02, 01 anzeigen 5227 23 00032 INC HL ;nächste Stelle des Graphikspeichers 5228 1B 00033 DEC DE ;Bytezähler herunterzählen 5229 7A 00034 LD A,D ;prüfen ob 522A B3 00035 OR E ;der Zähler schon abgelaufen ist 522B 20F9 00036 JR NZ,setpix ;falls nein: weiter Pixels anzeigen 522D 79 00037 LD A,C ;A <= Inhalt von Port F3h 522E C604 00038 ADD A,04h ;abgelaufen: nächsten Bildschirm selekt. 5230 10EC 00039 DJNZ fillscr ;nächst. Bildsch. mir einem Muster füllen 5232 AF 00040 XOR A ;A <= 0, Bildschirm 0 des Vierfach G3s 5233 D3F3 00041 OUT (0f3h),A ;zurückstellen 5235 F1 00042 POP AF ;Systenbyte 1 (noch alt angez. Graphik) 5236 D3FA 00043 OUT (0fah),A ;ab 8000h wieder RAM einblenden 5238 CD490 00044 CALL 0049h ;auf irgendeinen Tastendruck warten 523B F1 00045 POP AF ;ursprüngl. Inhalt von Port FAh (o. Gr.) 523C D3FA 00046 OUT (0fah),A ;restaurieren 523E C3C901 00047 JP 01c9h ;CLS (Videoformat restaur.) EI und ENDE 00048 00049 ; Die Daten für den CRTC können nach Belieben zum Test geändert werden 00050 5241 70 00051 data DB 70h ;Reg. 0: Bildschirmbreite112 Zeichen 5242 5V 00052 DB 5ch ; 1: angezeigt 92 Zeichen 5243 61 00053 DB 61h ; 2: horizontale Sync-Position 5244 08 00054 DB 08h ; 3: Breite des Sync-Impulses 5245 20 00055 DB 20h ; 4: Bildhöhe 64 Z. (Hälfte von Interlace) 5246 10 00056 DB 10h ; 5: Bildhöhenjustage in Zeilen 5247 1E 00057 DB 1eh ; 6: angezeigt 60 Zeilen (Hälfte v. Interl.) 5248 1F 00058 DB 1fh ; 7: vertikale Sync-Position 5249 03 00059 DB 03h ; 8: Interlace-Modus 524A 08 00060 DB 0bh ; 9: Zeilen pro Zeichen -1 (=12 lpc) 524B 29 00061 DB 29h ; 10: Cursor: oberer Rand und Anzeigemodus 524C 09 00062 DB 09h ; 11: dto. unterer Rand 524D 00 00063 DB 00h ; 12: Bildschirmanfang (relativ zu 3800h) MSB 524E 00 00064 DB 00h ; 13: dto. LSB 524F 00 00065 DB 00h ; 14: Cursoradresse (relativ zu 3800h) MSB 5250 00 00066 DB 99h ; 15: dto. LSB 00067 5200 00068 END start ; dort Einsprung 00000 Fehler data 5241 fillscr 521F setcrtc 5207 setpix 5226 start 5200 |